解决 go get 撞墙问题

本文介绍了解决Go语言开发中遇到的第三方包下载问题的方法,特别是当golang.org被屏蔽时,通过本地搭建golang.org/x/net环境来解决。

解决 go get 撞墙问题

1 背景

go语言开发时经常会遇到无法下载某些第三方包(unrecognized import path "golang.org/x/net/……" ),原因是 golang.org 被墙了,比如安装 github.com/mattn/go-sqlite3。VPN自然可以解决,其实不借助梯子也能解决。

2 查看配置环境

检查GOPATHGOROOT

# go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/export/test-go"
GORACE=""
GOROOT="/export/go"
GOTOOLDIR="/export/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

注意:所有下载的包会默认放在GOPATH,因此这个目录是必须的,且一般包含src pkg bin三个目录,分别存放源码包、编译包、可执行文件

3 下载安装golang.org/x/net

为了使包的导入方式不变,需要在src目录下构造目录结构

$mkdir -p $GOPATH/src/golang.org/x/
$cd $GOPATH/src/golang.org/x/
$git clone https://github.com/golang/net.git net 
$go install net

4 安装gcc

如果缺少 gcc,可能报错

exec: "gcc": executable file not found in %PATH%

自行安装mingw 64位,下载地址:https://sourceforge.net/projects/mingw-w64/files/,注意区分系统 32bit64bit ,并将 bin 目录添加到 %PATH% 环境变量

使用Python编写贪吃蛇游戏可以借助`pygame`或`turtle`库实现,以下是两种实现方法的介绍: #### 使用`pygame`库 `pygame`是Python专门用于游戏开发的模块,使用前需自行安装。以下是一个简单示例: ```python import pygame import sys import random import time from pygame.locals import * # 初始化pygame pygame.init() # 设置游戏窗口 width = 600 height = 400 screen = pygame.display.set_mode((width, height)) pygame.display.set_caption('贪吃蛇游戏') # 定义颜色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) GREEN = (0, 255, 0) RED = (255, 0, 0) # 蛇的初始位置和大小 snake_pos = [[100, 100]] snake_size = 20 snake_speed = 20 # 食物的初始位置 food_pos = [random.randrange(1, (width // snake_size)) * snake_size, random.randrange(1, (height // snake_size)) * snake_size] # 移动方向 direction = 'RIGHT' # 游戏主循环 while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == KEYDOWN: if event.key == K_UP and direction != 'DOWN': direction = 'UP' elif event.key == K_DOWN and direction != 'UP': direction = 'DOWN' elif event.key == K_LEFT and direction != 'RIGHT': direction = 'LEFT' elif event.key == K_RIGHT and direction != 'LEFT': direction = 'RIGHT' # 移动蛇 if direction == 'UP': new_head = [snake_pos[0][0], snake_pos[0][1] - snake_speed] elif direction == 'DOWN': new_head = [snake_pos[0][0], snake_pos[0][1] + snake_speed] elif direction == 'LEFT': new_head = [snake_pos[0][0] - snake_speed, snake_pos[0][1]] elif direction == 'RIGHT': new_head = [snake_pos[0][0] + snake_speed, snake_pos[0][1]] snake_pos.insert(0, new_head) # 判断是否吃到食物 if snake_pos[0] == food_pos: food_pos = [random.randrange(1, (width // snake_size)) * snake_size, random.randrange(1, (height // snake_size)) * snake_size] else: snake_pos.pop() # 判断是否撞墙或撞到自己 if (snake_pos[0][0] < 0 or snake_pos[0][0] >= width or snake_pos[0][1] < 0 or snake_pos[0][1] >= height or snake_pos[0] in snake_pos[1:]): time.sleep(1) pygame.quit() sys.exit() # 绘制背景 screen.fill(BLACK) # 绘制蛇 for pos in snake_pos: pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], snake_size, snake_size)) # 绘制食物 pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], snake_size, snake_size)) # 更新显示 pygame.display.update() # 控制游戏速度 pygame.time.Clock().tick(10) ``` #### 使用`turtle`库 `turtle`是Python内置的绘图库,也可以用来实现简单的贪吃蛇游戏。 ```python import turtle import time import random # 设置屏幕 wn = turtle.Screen() wn.title("贪吃蛇游戏") wn.bgcolor("green") wn.setup(width=600, height=600) wn.tracer(0) # 蛇头 head = turtle.Turtle() head.speed(0) head.shape("square") head.color("black") head.penup() head.goto(0, 0) head.direction = "stop" # 食物 food = turtle.Turtle() food.speed(0) food.shape("circle") food.color("red") food.penup() x = random.randint(-290, 290) y = random.randint(-290, 290) food.goto(x, y) segments = [] # 函数定义 def go_up(): if head.direction != "down": head.direction = "up" def go_down(): if head.direction != "up": head.direction = "down" def go_left(): if head.direction != "right": head.direction = "left" def go_right(): if head.direction != "left": head.direction = "right" def move(): if head.direction == "up": y = head.ycor() head.sety(y + 20) elif head.direction == "down": y = head.ycor() head.sety(y - 20) elif head.direction == "left": x = head.xcor() head.setx(x - 20) elif head.direction == "right": x = head.xcor() head.setx(x + 20) # 键盘绑定 wn.listen() wn.onkeypress(go_up, "Up") wn.onkeypress(go_down, "Down") wn.onkeypress(go_left, "Left") wn.onkeypress(go_right, "Right") # 主游戏循环 while True: wn.update() # 检查是否撞到边界 if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290: time.sleep(1) head.goto(0, 0) head.direction = "stop" # 隐藏蛇的身体部分 for segment in segments: segment.goto(1000, 1000) # 清空蛇的身体部分列表 segments.clear() # 检查是否吃到食物 if head.distance(food) < 20: # 移动食物到新的随机位置 x = random.randint(-290, 290) y = random.randint(-290, 290) food.goto(x, y) # 添加蛇的身体部分 new_segment = turtle.Turtle() new_segment.speed(0) new_segment.shape("square") new_segment.color("grey") new_segment.penup() segments.append(new_segment) # 移动蛇的身体部分 for index in range(len(segments) - 1, 0, -1): x = segments[index - 1].xcor() y = segments[index - 1].ycor() segments[index].goto(x, y) # 移动第一段身体到蛇头位置 if len(segments) > 0: x = head.xcor() y = head.ycor() segments[0].goto(x, y) move() # 检查是否撞到自己的身体 for segment in segments: if segment.distance(head) < 20: time.sleep(1) head.goto(0, 0) head.direction = "stop" # 隐藏蛇的身体部分 for seg in segments: seg.goto(1000, 1000) # 清空蛇的身体部分列表 segments.clear() time.sleep(0.1) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值