golang学习笔记---类型

小数类型/浮点型

// 演示精度丢失:尾数部分可能丢失 
var num3 float32 = -123.0000901
var num4 float64 = -123.0000901
fmt.Println("num3 = ", num3, "num4 = ", num4)

// Golang的浮点型默认声明为float64
    var num5 = 1.1
    fmt.Printf("num5 的数据类型是 %T 
", num5)

    // 浮点型声明:十进制形式 如:5.12   .123
    num6 := 5.12
    num7 := .123    // =>0.123
    fmt.Println("num6 = ", num6, "num7 = ", num7)

    // 浮点型声明:科学计数法形式,e与E一样
    num8 := 5.1234e2    // =>5.1234 * 10的2次方
    num9 := 5.1234E-2    // =>5.1234 / 10的2次方
    fmt.Println("num8 = ", num8, "num9 = ", num9)

 字符(char)

// 演示Golang中字符类型的使用
func main() {

    var c1 byte = 'a'
    var c2 byte = '0'

    // 当我们直接输出byte值,就是输出了对应字符的ASCII码值
    // a==> 97    0==>48
    fmt.Println("c1 = ", c1)
    fmt.Println("c2 = ", c2)
    // 如果我们希望输出对应的字符,需要使用格式化输出
    fmt.Printf("c1 =  %c c2 =  %c 
", c1, c2)

    // var c3 byte = ''
    // 会报错:./main.go:19:16: constant 40644 overflows byte
    // 因为byte范围是0~255,所以换一个范围大的类型即可
    var c3 int = ''
    fmt.Printf("c3 =  %c c3对应的ASCII码值 = %d 
", c3, c3)
}

 

 // 可以直接给某个变量赋一个数字,然后按格式输出%c,会输出数字对应的Unicode字符
    var c4 int = 22269    //22269->国
    fmt.Printf("c4 =  %c 
", c4)

    //字符类型可以直接进行运算,相当于一个整数,运算时按ASCII码值运算
    var n1 = 10 + 'a'    //10 + 97 = 107
    fmt.Println("n1 = ", n1)

string

 

package main
import (
    "fmt"
)

// 演示Golang中string类型的使用
func main() {
    // string的基本使用
    var address string = "北京长城!"
    fmt.Println(address)

    // string的注意事项
    var str string = "hello world!!!"
    // str[0] = 'y'    // 报错:./main.go:14:9: cannot assign to str[0]   不能修改
    fmt.Println(str)

    //    字符串的两种表现形式(1)双引号,(2)反引号,在esc下面那个键
    str2 := "abc
abc"    //双引号会转意
    fmt.Println(str2)

    // 使用反引号``,以字符串的原生形式输出,包括换行和特殊字符,可以防止攻击
    str3 := `
    package main
    import "fmt"
    
    func main() {
        // golang的变量使用方式1
        // 第一种:指定变量类型,声明后若不赋值,使用默认值
        // int 的默认值是0 其它数据
        var age int
        age = 20
        fmt.Println("age = ", age)
    
        // 第二种:根据值自行判断变量类型(类型推导)
        var num = 10.11
        fmt.Println("num = ", num)
    
        // 第三种:省略var,注意 :=  左侧的变量不应该是已经声明过的,否则编译报错
        // 下面的方式等价于 var name string     name = "tom"
        name := "tom"
        fmt.Println("name = ", name)
    }
    `
    fmt.Println(str3)

    // 字符串拼接方式
    var str4 = "hello" + "world"
    str4 += " hhhha!"
    fmt.Println(str4)

}

基础数据类型与string的转换

// 演示Golang中基本数据类型转成string
func main() {

    var num1 int = 99
    var num2 float64 = 23.456
    var b bool = true
    var myChar byte = 'h'
    var str string     //空的string

    // 使用第一种方式转换    fmt.Sprintf方法
    // 前面的%参数详情:https://studygolang.com/pkgdoc   下的fmt
    str = fmt.Sprintf("%d", num1)
    fmt.Printf("str type is %T str = %q  
", str, str)

    str = fmt.Sprintf("%f", num2)
    fmt.Printf("str type is %T str = %q 
", str, str)

    str = fmt.Sprintf("%t", b)
    fmt.Printf("str type is %T str = %q  
", str, str)

    str = fmt.Sprintf("%c", myChar)
    fmt.Printf("str type is %T str = %q  
", str, str)
}

使用strconv包

1) 基础数据类型转string

package main
import (
    "fmt"
    "strconv"
)

// 演示Golang中基本数据类型转成string
func main() {

    // 使用第二种方式转换    使用  strconv  包的函数
    // 详情:https://studygolang.com/pkgdoc   下的strconv
    var num3 int = 99
    var num4 float64 = 23.456
    var b2 bool = true
    var str string     //空的string

    str = strconv.FormatInt(int64(num3), 10)
    fmt.Printf("str type is %T str = %q  
", str, str)

    // 说明: 'f'--格式;10--表示小数位保留10位;64--表示这个小数是float64
    str = strconv.FormatFloat(num4, 'f', 10, 64)
    fmt.Printf("str type is %T str = %q  
", str, str)

    str = strconv.FormatBool(b2)
    fmt.Printf("str type is %T str = %q  
", str, str)

}

 

2) String转基础数据类型

 

package main
import (
    "fmt"
    "strconv"
)

// 演示Golang中string转成基本数据类型
func main() {

    var str string = "true"
    var b bool
    // strconv.ParseBool(str)函数会返回两个值 (value bool, err error)
    // 因为只想获取value,不想获取err,所以使用‘_’忽略
    b, _ = strconv.ParseBool(str)
    fmt.Printf("b type is %T b = %v  
", b, b)

    var str2 string = "1234560"
    var num1 int64
    //将str2转成10进制的;转成64位的;使用‘_’忽略err
    num1, _ = strconv.ParseInt(str2 ,10, 64)
    fmt.Printf("num1 type is %T num1 = %v  
", num1, num1)
    // 因为go默认转换回来的都是64位,不论是int还是float,如果我们不想要那么大,只能自己转
    var num2 int
    num2 = int(num1)
    fmt.Printf("num2 type is %T num2 = %v  
", num2, num2)

    var str3 string = "123.456"
    var f1 float64
    //将str3转成转成64位的;使用‘_’忽略err
    f1, _ = strconv.ParseFloat(str3 , 64)
    fmt.Printf("f1 type is %T f1 = %v  
", f1, f1)
}

指针类型

 

 

 注意事项:

 

 

 获取用户端输入:使用 fmt.Scanln()

package main
import (
    "fmt"
)

// 要求:可以从控制台接收用户信息【姓名,年龄,薪水,是否通过考试】
func main() {

    // 声明变量
    var name string
    var age byte
    var sal float32
    var isPass bool

    // 方式1:fmt.Scanln()
    fmt.Println("请输入姓名 ")
    // 当程序执行到 fmt.Scanln(&name) 时,程序会停止在这,等待用户输入并回车
    fmt.Scanln(&name)

    fmt.Println("请输入年龄 ")
    fmt.Scanln(&age)

    fmt.Println("请输入薪水 ")
    fmt.Scanln(&sal)

    fmt.Println("请输入是否通过考试 ")
    fmt.Scanln(&isPass)

    fmt.Printf("姓名是 %v 
年龄是 %v 
薪水是 %v 
是否通过考试 %v 
 ", name, age, sal, isPass)

}

使用 fmt.Scanf()

package main import ( "fmt" ) // 要求:可以从控制台接收用户信息【姓名,年龄,薪水,是否通过考试】func main() { // 声明变量var name stringvar age bytevar sal float32 var isPass bool fmt.Println("请输入您的姓名,年龄,薪水,是否通过考试;使用空格隔开! ") fmt.Scanf("%s %d %f %t",&name, &age, &sal, &isPass ) fmt.Printf("姓名是 %v 年龄是 %v 薪水是 %v 是否通过考试 %v ", name, age, sal, isPass) }

Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型

 

 

// 可以直接给某个变量赋一个数字,然后按格式输出%c,会输出数字对应的Unicode字符var c4 int = 22269//22269->国 fmt.Printf("c4 = %c ", c4) //字符类型可以直接进行运算,相当于一个整数,运算时按ASCII码值运算var n1 = 10 + 'a'//10 + 97 = 107 fmt.Println("n1 = ", n1)

原文地址:https://www.cnblogs.com/saryli/p/13539089.html