GoLang 之旅(一)
输出Hello World#
1 2 3 4 5 6 7 | package main import "fmt" func main() { fmt.Println( "Hello, 世界" ) } |
导入math/rand包输出随机数#
1 2 3 4 5 6 7 8 9 10 | package main import ( "fmt" "math/rand" ) func main() { fmt.Println( "My favorite number is" , rand.Intn(10)) } |
导入math包使用开根号功能#
1 2 3 4 5 6 7 8 9 10 | package main import ( "fmt" "math" ) func main() { fmt.Printf( "Now you have %g problems.\n" , math.Sqrt(7)) } |
已导出的包要大写#
1 2 3 4 5 6 7 8 9 10 | package main import ( "fmt" "math" ) func main() { fmt.Println(math.Pi) } |
函数传参数#
1 2 3 4 5 6 7 8 9 10 11 | package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) } |
函数传多个参数,除最后一个参数意外,其他参数类型可以省略#
1 2 3 4 5 6 7 8 9 10 11 | package main import "fmt" func add(x, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) } |
函数可以返回任意数量的值#
1 2 3 4 5 6 7 8 9 10 11 12 | package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap( "hello" , "world" ) fmt.Println(a, b) } |
命名返回值,直接返回的语句,可以返回已命名的返回值#
1 2 3 4 5 6 7 8 9 10 11 12 13 | package main import "fmt" func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } func main() { fmt.Println(split(17)) } |
// 输出 7 10
var声明变量列表
1 2 3 4 5 6 7 8 9 10 | package main import "fmt" var c, python, java bool func main() { var i int fmt.Println(i, c, python, java) } |
输出 0 false false false
变量初始化#
1 2 3 4 5 6 7 8 9 10 | package main import "fmt" var i, j int = 1, 2 func main() { var c, python, java = true, false, "no!" fmt.Println(i, j, c, python, java) } |
输出 1 2 true false no!
短变量声明,类型明确的情况下可用,:= 只能在函数内使用
1 2 3 4 5 6 7 8 9 10 11 | package main import "fmt" func main() { var i, j int = 1, 2 k := 3 c, python, java := true, false, "no!" fmt.Println(i, j, k, c, python, java) } |
输出 1 2 3 true false no!
Go的基本类型#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 // 表示一个 Unicode 码点 float32 float64 complex64 complex128 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package main import ( "fmt" "math/cmplx" ) var ( ToBe bool = false MaxInt uint64 = 1<<64 - 1 z complex128 = cmplx.Sqrt(-5 + 12i) ) func main() { fmt.Printf( "Type: %T Value: %v\n" , ToBe, ToBe) fmt.Printf( "Type: %T Value: %v\n" , MaxInt, MaxInt) fmt.Printf( "Type: %T Value: %v\n" , z, z) } |
输出
Type: bool Value: false
Type: uint64 Value: 18446744073709551615
Type: complex128 Value: (2+3i)
零值,未被赋值的地方会赋予零值#
1 2 3 4 5 6 7 8 9 10 11 | package main import "fmt" func main() { var i int var f float64 var b bool var s string fmt.Printf( "%v %v %v %q\n" , i, f, b, s) } |
输出 0 0 false ""
类型转换#
表达式 T(v)
将值 v
转换为类型 T
。
一些关于数值的转换:
1 2 3 | var i int = 42 var f float64 = float64(i) var u uint = uint(f) |
或者,更加简单的形式:
1 2 3 | i := 42 f := float64(i) u := uint(f) |
1 2 3 4 5 6 7 8 9 10 11 12 13 | package main import ( "fmt" "math" ) func main() { var x, y int = 3, 4 var f float64 = math.Sqrt(float64(x*x + y*y)) var z uint = uint(f) fmt.Println(x, y, z) } |
输出 3 4 5
类型推导#
在声明一个变量而不指定其类型时(即使用不带类型的 :=
语法或 var =
表达式语法),变量的类型由右值推导得出。
当右值声明了类型时,新变量的类型与其相同:
1 2 | var i int j := i // j 也是一个 int |
不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int
, float64
或 complex128
了,这取决于常量的精度:
1 2 3 | i := 42 // int f := 3.142 // float64 g := 0.867 + 0.5i // complex128 |
1 2 3 4 5 6 7 8 | package main import "fmt" func main() { v := 42 // 修改这里! fmt.Printf( "v is of type %T\n" , v) } |
1 | 输出 v is of type int |
常量,关键字const,字符,字符串,布尔值和数值#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package main import "fmt" const Pi = 3.14 func main() { const World = "世界" fmt.Println( "Hello" , World) fmt.Println( "Happy" , Pi, "Day" ) const Truth = true fmt.Println( "Go rules?" , Truth) } |
输出
Hello 世界
Happy 3.14 Day
Go rules? true
数值常量#
数值常量是高精度的 值
一个未指定类型的常量由上下文来决定其类型
int
类型最大可以存储一个 64 位的整数,有时会更小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package main import "fmt" const ( // 将 1 左移 100 位来创建一个非常大的数字 // 即这个数的二进制是 1 后面跟着 100 个 0 Big = 1 << 100 // 再往右移 99 位,即 Small = 1 << 1,或者说 Small = 2 Small = Big >> 99 ) func needInt(x int) int { return x*10 + 1 } func needFloat(x float64) float64 { return x * 0.1 } func main() { fmt.Println(needInt(Small)) fmt.Println(needFloat(Small)) fmt.Println(needFloat(Big)) } // 输出// 21 // 0.2 // 1.2676506002282295e+29 |
作者:BigBender
出处:https://www.cnblogs.com/BigBender/p/12150514.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!