Golang基础

admin 2024年8月2日23:14:19评论13 views字数 2833阅读9分26秒阅读模式

开发环境

IDE选择

goland

由jet brains所推出的一款ide,可以说这家公司的ide系列都是非常好用的

Golang基础

vscode

vscode是由微软推出的ide,但是需要装许多的插件才能使用,前期的配置起来还是比较繁琐,优点就是可以在一个vscode上编辑不同的语言

Golang基础

Golang安装

https://golang.google.cn/dl/ 官网下载根据系统下载安装包

Golang基础

设置环境变量

添加对应的环境变量,在powershell的终端中以此输入下列环境,最后用 go env 查看修改情况

setx GOBIN "%GOPATH%bin"
setx PATH "%PATH%;%GOBIN%"
setx GO111MODULE "on"
setx GOPROXY https://mirrors.aliyun.com/goproxy/


Golang基础

第一个程序

hello world

该程序一定要严格按照下面的来写

package main
import "fmt"

func main() {
fmt.Println("Hello World")
}


Golang基础

Go语法

数据类型

基本数据类型

bool、string、int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr、byte、rune、float32、float64、complex64(复数)、complex128

var x = "test"	//关键字var定义变量x,数据类型由系统判断
z := int(233) //定义变量z,赋值为int型的233


Golang基础

切片和映射

列表和字典

var s = make([]string, 0)
s = append(s, "something")

var m = make(map[string]string)
m["key"] = "value"


Golang基础

Golang基础

指针

&获取变量内存地址,*获取地址中值

var num = int(123)
ptr := &num
fmt.Println(*ptr)
*ptr = 100
fmt.Println(num)


Golang基础

结构体

创建基础模版

※在go中以大小写字母来确定作用域,大写开头为包外可用,小写开头则为私有

type Person struct {
Name string
Age int
}
func (p *Person) SayHello() {
fmt.Println("Hello,", p.Name)
}
func main() {
var guy = new (Person)
guy.Name = "Dave"
guy.SayHello()
}


Golang基础

接口

方便调用函数

func(p *Person) SayHello() {
fmt.Println("Hello,", p.Name)
}
type Friend interface {
SayHello()
}

func Greet(f Friend) {
f.SayHello()
}

type Dog struct { }
func (d *Dog) SayHello() {
fmt.Println("Woof")
}

func main() {
var guy = new(Person)
guy.Name = "Dave"
Greet(guy)
var dog = new(Dog)
Greet(dog)
}

控制结构

if/else

用于条件判断

if x == 1 {
fmt.Println("x = 1")
} else {
fmt.Println("x ≠ 1")
}


Golang基础

switch

条件判断

switch x {
case "aaa":
fmt.Println("Found aaa")
case "bbb":
fmt.Println("Found bbb")
default:
fmt.Println("Default case")
}


Golang基础



通过switch判断数据类型

func test(i interface{}) { //定义参数类型
switch i.(type) { //参数类型
case int:
fmt.Println("Integer")
case string:
fmt.Println("String")
default:
fmt.Println("Unknown type")
}
}

func main() {
test("aaa")
}


Golang基础

for

for i := 0; i < 10; i++ {
fmt.Println(i)
}


Golang基础

遍历数组

num := []int{2,4,6,8}
for idx, val := range num {
fmt.Println(idx, val)
}

并发

goroutine

go中有一种channel的数据类型,该类型提供了一种机制,goroutine可以同步执行函数并且这些函数可以相互通信

package main

import (
"fmt"
"time"
)

func f() {
fmt.Println("f function")
}

func main() {
go f()
time.Sleep(1 * time.Second)
fmt.Println("main function")
}
//程序同时运行函数f和main

通道

使用通道同时显示不同字符串长度和总和

package main

import "fmt"

func strlen(s string, c chan int) {
c <- len(s) //将结果放入通道c
}

func main() {
c := make(chan int) //make创建通道
go strlen("Salutations", c)
go strlen("World", c)
x, y := <-c, <-c
fmt.Println(x, y ,x+y)
}
  • chan int int类型的通道

  • <- 运算符指示数据流入还是流出通道

错误处理

在go中并没有try、catch、finally这样的处理语法

在错误处理常见的代码如下

import "errors"

func x() error {
return errors.New("Some Error Occurred")
}
func main() {
if err := x(); err != nil {
//处理错误
}
}

处理结构化数据

Json

import (
"encoding/json"
"fmt"
)

type x struct {
Name string
Word string
}

func main() {
f := x{"Catalyze", "Hello World"}
b, _ := json.Marshal(f) //_用于接收其他不需要的值
fmt.Println(string(b))
json.Unmarshal(b, &f)
}

Marshal() 该方法将struct编码为json

Unmarshal() 该方法将json解码为struct格式

XML

import (
"encoding/xml"
"fmt"
)

type x struct {
Name string `xml:"name,attr"`
Word string `xml:"parent>child"`
}

func main() {
f := x{"Catalyze", "Hello World"}
b, _ := xml.Marshal(f)
fmt.Println(string(b))
xml.Unmarshal(b, &f)
}


Golang基础


原文始发于微信公众号(CatalyzeSec):Golang基础

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月2日23:14:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Golang基础https://cn-sec.com/archives/3028410.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息